List Comprehension 列表生成式為 Python 內建的,相當強大且簡單就能生成 list 的方法,今天會先介紹一下 loop,再來介紹生成式的各種使用方法。
可以使用 for loop 來把 list 的每一個元素都跑一遍。
list1 = ['酷哥', '辣妹', '小哥', '小姐']
for x in list1:
print(x)
也可以用 len() 先取出 list 的長度,再用 index 來做
list1 = ['酷哥', '辣妹', '小哥', '小姐']
for x in range(len(list1)):
print(list1[x])
或是使用 while loop 來做,一樣用 len 取出這個 list 的長度,再根據 index 取值
list1 = ['酷哥', '辣妹', '小哥', '小姐']
i = 0
while i < len(list1):
print(list1[i])
i += 1

如果我想要生成 [1, 2, 3, 4, 5] 的一個 list,可以使用以下四種方法。
使用 list.append() 函式,來一個一個輸入
a = []
a.append(1)
a.append(2)
a.append(3)
a.append(4)
a.append(5)
print('a =', a)
使用 range 來生成 1 - 5,並用 append 按照迴圈加入 list 當中
b = []
for i in range(1, 6):
b.append(i)
print('b =', b)
使用 range 來生成 1 - 5,並直接用 list() 轉為 list
c = list(range(1, 6))
print('c =', c)
簡化過後可以變為這樣
d = [x for x in range(1, 6)]
print('d =', d)

如果要生成 [1^2, 2^2, 3^2, ..., 10^2] 1 到 10 的平方
a = []
for x in range(1, 11):
a.append(x ** 2)
print('a =', a)
可以把上面的 code 簡化成底下的樣子
b = [x ** 2 for x in range(1, 11)]
print('b =', b)

撰寫升成式時,需要記得要把「要生成的元素」放在前面,後面放 for loop

在生成式裡面加入判斷條件:只要偶數的平方的話,加一個 if x % 2 == 0 就搞定了
b = [x ** 2 for x in range(1, 11) if x % 2 == 0]
print('b =', b)

雙層生成式
for 前面當作 str 進行撰寫,並用雙層生成式來排列出所有可能性
c = [a + b for a in '123' for b in '456']
print(c)

昨天的文章中有提到用 for loop 可以一次把 dict 中的整個 item 取出,並放在兩個變數之中,這裡也可以用在列表生成式。
# 昨天的 code
dict2 = {'a':'A', 'b':'B', 'c':'C'}
for x, y in dict2.items():
print(x, y)
dict2 = {'a':'A', 'b':'B', 'c':'C'}
list2 = [x + '=' + y for x, y in dict2.items()]
print(list2)

加上 String Methods 一起使用
list1 = ['apple', 'banana', 'orange']
list2 = [x.capitalize() for x in list1] # 把字串字首變為大寫的函式
print(list2)

list.sort:排序 list 內的元素list.sort()
預設的 .sort() 是升冪排序的,數字會由小到大,英文字母由 a 到 z
list1 = ['z', 'b', 'zb', 'za', 'osww', 'gegw']
list1.sort()
print(list1)
list2 = [23, 45, 69, 64, 33, 335, 3]
list2.sort()
print(list2)

reverse = True
如果想要降冪排序,則加上 reversr = True 在括號內即可
list1 = ['z', 'b', 'Zb', 'za', 'osww', 'gegw']
list1.sort(reverse = True)
print(list1)
list2 = [23, 45, 69, 64, 33, 335, 3]
list2.sort(reverse = True)
print(list2)

key:可以自訂你的排列方式
底下的程式為:根據他們的平方大小來排序
def myfunc(x):
return x ** 2
list2 = [-1, -6, 69, 64, -33, 335, 23]
list2.sort(key = myfunc)
print(list2)

若在加上 reverse = True 就可以把輸出改為降冪
def myfunc(x):
return x ** 2
list2 = [-1, -6, 69, 64, -33, 335, 23]
list2.sort(key = myfunc, reverse = True)
print(list2)

待續...